//
// Created by 罗玉龙 on 2017/6/18.
//
#include <iostream>
/*
 定义 'register' 并不意味着变量将被存储在寄存器中，它意味着变量可能存储在寄存器中，这取决于硬件和实现的限制。
{
register int  miles;
}

 */



////static 存储类
//// 函数声明
//void func(void);
//
//static int count = 10; /* 全局变量 */
//
//int main()
//{
//    while(count--)
//    {
//        func();
//    }
//    return 0;
//}
//// 函数定义
//void func( void )
//{
//    static int i = 5; // 局部静态变量
//    i++;
//    std::cout << "变量 i 为 " << i ;
//    std::cout << " , 变量 count 为 " << count << std::endl;
//}


//extern 存储类用于提供一个全局变量的引用，全局变量对所有的程序文件都是可见的。当您使用 'extern' 时，对于无法初始化的变量，会把变量名指向一个之前定义过的存储位置。
//当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时，可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解，extern 是用来在另一个文件中声明一个全局变量或函数。
//extern存储类
//int count ;
//extern void write_extern();
//
//int main()
//{
//    count = 5;
//    write_extern();
//}


//thread_local 存储类
//        使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。 变量在创建线程时创建，并在销毁线程时销毁。 每个线程都有其自己的变量副本。
//thread_local 说明符可以与 static 或 extern 合并。
//可以将 thread_local 仅应用于数据声明和定义，thread_local 不能用于函数声明或定义。
//thread_local int x;  // 命名空间下的全局变量
//class X
//{
//    static thread_local std::string s; // 类的static成员变量
//};
//static thread_local std::string X::s;  // X::s 是需要定义的
//
//void foo()
//{
//    thread_local std::vector<int> v;  // 本地变量
//}